function Fun(name, age) {
  this.name = name;
  this.age = age;
}

function myNew(fn, ...args) {
  // 第一步先构建一个空对象
  let obj = {}; // 或者 let obj = Object.create({})
  // 第二步将新对象的原型指向构造函数对象原型
  Object.setPrototypeOf(obj, fn.prototype);
  // 第三步将空对象作为构造函数的上下文（改变this指向)
  let result = fn.apply(obj, args); // 执行一遍，查看返回值
  // 第四步返回新对象
  return result instanceof Object ? result : obj;
}

console.log(myNew(Fun, "张三", 18));
